本发明实施例公开了一种处理脏数据的方法及装置。本发明实施例提供的方法包括:在内存中确定第一存储块,所述第一存储块的大小与cache的写规格相匹配;将内存中标记为脏数据的元组合并写入所述第一存储块;将所述第一存储块中的脏数据写入所述cache,通过所述cache将所述脏数据写入磁盘。通过实施本发明,能够提升数据库系统的数据吞吐量以及读写性能。
1.一种处理脏数据的方法,其特征在于,包括:在内存中确定第一存储块,所述第一存储块的大小与高速缓冲存储器cache的写规格相匹配;将内存中标记为脏数据的元组合并写入所述第一存储块;将所述第一存储块中的脏数据写入所述cache,通过所述cache将所述脏数据写入磁盘。
2.根据权利要求1所述的方法,其特征在于,所述在内存中确定第一存储块包括:将内存中的空闲空间进行整合,得到所述第一存储块;或者在内存中预留符合所述第一存储块规格的存储空间作为所述第一存储块。
3.根据权利要求2所述的方法,其特征在于,所述将内存中标记为脏数据的元组合并写入所述第一存储块之后,所述第一存储块中存储有标记为脏数据的每个元组所属的原始存储块信息、每个元组的数据以及指向每个元组数据的指针。
4.根据权利要求3所述的方法,其特征在于,所述将内存中标记为脏数据的元组合并写入所述第一存储块之后,还包括:在所述内存中建立第一映射表,所述第一映射表用于记录所述第一存储块中各元组的时间版本号以及所述各元组所属的原始存储块信息,其中,所述各元组的时间版本号用于表征该元组在所述cache中所属的第一存储块的版本信息。
5.根据权利要求4所述的方法,其特征在于,当所述内存中标记为脏数据的元组进行过多次修改时,所述方法还包括:修改该元组在所述第一映射表中的时间版本号信息,更新所述第一映射表;则所述将所述第一存储块中的脏数据写入所述cache,通过所述cache将所述脏数据写入磁盘包括:根据所述第一映射表查找所述脏数据中各元组数据最终值的时间版本号,确定所述cache中与所述时间版本号对应的第一存储块信息,并将该第一存储块信息中存储有所述各元组数据最终值的元组进行标记,将其设置为有效元组;将所述有效元组写入磁盘,删除所述有效元组在所述第一映射表中对应的时间版本号信息以及所述有效元组在所述cache中对应的元组数据信息。
6.根据权利要求5所述的方法,其特征在于,所述将所述有效元组写入磁盘包括:根据所述第一映射表确定所述有效元组中各元组所属的原始存储块信息;将属于同一原始存储块的元组合并写入磁盘,并删除该元组在所述cache中对应的元组数据信息。
7.根据权利要求1至6中任一项所述的方法,其特征在于,当需要查找指定元组时,所述方法还包括:访问所述第一映射表,确定所述cache中是否包括所述指定元组;当所述cache中包括所述指定元组时,根据第一映射表确定所述cache中包括该指定元组数据最终值的第一存储块信息,确定所述指定元组的数据。
8.根据权利要求1至6中任一项所述的方法,其特征在于,当发生异常情况导致将脏数据写入磁盘的过程被迫终止时,所述方法还包括:在服务器重启后,根据所述cache中剩余版本的第一存储块信息重构所述第一映射表;根据所述第一映射表查找所述cache中剩余脏数据中各元组数据最终值的时间版本号,确定所述cache中与所述时间版本号对应的第一存储块信息,并将该第一存储块信息中存储有所述各元组数据最终值的元组进行标记,将其设置为有效元组;将所述有效元组写入磁盘,删除所述有效元组在所述第一映射表中对应的时间版本号信息以及所述有效元组在所述cache中对应的元组数据信息。
9.根据权利要求1至6中任一项所述的方法,其特征在于,当服务器关闭时,所述方法还包括:将内存中的第一映射表存储于所述cache中,以使得服务器在重启后根据所述第一映射表将所述cache中剩余版本的第一存储块信息写入磁盘。
10.一种处理脏数据的装置,其特征在于,包括:确定单元,用于在内存中确定第一存储块,所述第一存储块的大小与高速缓冲存储器cache的写规格相匹配;第一写单元,用于将内存中标记为脏数据的元组合并写入所述第一存储块;第二写单元,用于将所述第一存储块中的脏数据写入所述cache,通过所述cache将所述脏数据写入磁盘。
11.根据权利要求10所述的装置,其特征在于,所述确定单元包括整合子单元或预留子单元,其中:所述整合子单元用于将内存中的空闲空间进行整合,得到所述第一存储块;所述预留子单元用于在内存中预留符合所述第一存储块规格的存储空间作为所述第一存储块。
12.根据权利要求11所述的装置,其特征在于,所述第一写单元还用于将内存中标记为脏数据的元组的相关信息写入所述第一存储块,所述元组的相关信息包括标记为脏数据的每个元组所属的原始存储块信息、每个元组的数据以及指向每个元组数据的指针。
13.根据权利要求12所述的装置,其特征在于,所述装置还包括:处理单元,用于在所述内存中建立第一映射表,所述第一映射表用于记录所述第一存储块中各元组的时间版本号以及所述各元组所属的原始存储块信息,其中,所述各元组的时间版本号用于表征该元组在所述cache中所属的第一存储块的版本信息。
14.根据权利要求13所述的装置,其特征在于,所述处理单元还用于当所述内存中标记为脏数据的元组进行过多次修改时,修改该元组在所述第一映射表中的时间版本号信息,更新所述第一映射表;所述第二写单元包括第一处理子单元、第一查找子单元和第二处理子单元,其中:所述第一处理子单元用于将所述第一存储块中的脏数据写入所述cache,通过所述cache将所述脏数据写入磁盘;所述第一查找子单元用于当所述内存中标记为脏数据的元组进行过多次修改时,根据所述第一映射表查找所述脏数据中各元组数据最终值的时间版本号,确定所述cache中与所述时间版本号对应的第一存储块信息,并将该第一存储块信息中存储有所述各元组数据最终值的元组进行标记,将其设置为有效元组;所述第二处理子单元用于将所述第一查找子单元确定的有效元组写入磁盘,并删除所述有效元组在所述cache中对应的元组数据信息;所述处理单元还用于在所述第二处理子单元将所述有效元组写入磁盘后,删除所述有效元组在所述第一映射表中对应的时间版本号信息。
15.根据权利要求14所述的装置,其特征在于,所述第二写单元还包括第二查找子单元和第三处理子单元,其中:所述第二查找子单元用于根据所述第一映射表确定所述有效元组中各元组所属的原始存储块信息;所述第三处理子单元用于将属于同一原始存储块的元组合并写入磁盘,并删除该元组在所述cache中对应的元组数据信息。
16.根据权利要求10至15中任一项所述的装置,其特征在于,还包括:第一查找单元,用于当需要查找指定元组时,访问所述第一映射表,确定所述cache中是否包括所述指定元组;第二查找单元,用于当所述cache中包括所述指定元组时,根据第一映射表确定所述cache中包括该指定元组数据最终值的第一存储块信息,确定所述指定元组的数据。
17.根据权利要求16中任一项所述的装置,其特征在于,所述处理单元还用于当发生异常情况导致将脏数据写入磁盘的过程被迫终止时,在服务器重启后根据所述cache中剩余版本的第一存储块信息重构所述第一映射表;所述第一查找子单元还用于根据所述处理单元重构的第一映射表查找所述cache中剩余脏数据中各元组数据最终值的时间版本号,确定所述cache中与所述时间版本号对应的第一存储块信息,并将该第一存储块信息中存储有所述各元组数据最终值的元组进行标记,将其设置为有效元组;所述第二处理子单元还用于将所述第一查找子单元确定的有效元组写入磁盘,并删除所述有效元组在所述cache中对应的元组数据信息;所述处理单元还用于在所述第二处理子单元将所述有效元组写入磁盘后,删除所述有效元组在所述第一映射表中对应的时间版本号信息。
18.根据权利要求16中任一项所述的装置,其特征在于,所述处理单元还用于当服务器关闭时,将所述内存中的第一映射表存储于所述cache中,以使得所述服务器在重启后根据所述第一映射表将所述cache中剩余版本的第一存储块信息写入磁盘。
19.一种存储器,其特征在于,包括根据权利要求9至16中任一项所述的处理脏数据的装置,以及处理器,其中:所述处理器用于控制所述处理脏数据的装置。
技术领域本发明涉及存储技术领域,尤其涉及一种处理脏数据的方法及装置。
背景技术数据库(Databa
se)是按照数据结构来组织、存储和管理数据的仓库。在日常工作中,常常需要把某些相关的数据放进这样“仓库”,并根据管理的需要进行相应的处理。传统的数据库系统等与存储相关的引擎工作原理是当数据在内存中被修改后,需要马上(或者在很短时间内)将修改后的数据写入磁盘,以保证事务的完整或数据库中数据的可靠性。在向磁盘写入所述修改后的数据的过程中,无法向内存写入数据,导致内存不得不暂停对外的业务,从而导致内存的吞吐量及系统的读写性能都受到较大限制。由于磁盘的读写速度远低于内存,很大程度上降低了系统性能。目前,主要通过增加类似于固态硬盘(Solidxa0Statexa0Disk,SSD)的闪存设备作为高速缓冲存储器(cache)提升系统的读写性能:内存以SSD中的存储块为单位将修改后的数据写入SSD;在业务空闲期将cache的数据写入磁盘,从而提高系统吞吐量及读写性能。其中,所述cache中已经修改过的、还未写入磁盘的数据就是脏数据。当内存中短时间内有大量数据被修改、且修改的数据分散于不同存储块时,SSD完成一次数据块读写时仅能够对少量脏数据进行处理,导致数据库系统的数据吞吐量及读写性能较低,造成系统响应延迟甚至导致数据库崩溃。
发明内容本发明的实施例提供了一种处理脏数据的方法及装置,能够提升数据库系统的数据吞吐量以及读写性能。本发明的实施例采用如下技术方案:一方面,本发明实施例提供了一种处理脏数据的方法,包括:在内存中确定第一存储块,所述第一存储块的大小与高速缓冲存储器cache的写规格相匹配;将内存中标记为脏数据的元组合并写入所述第一存储块;将所述第一存储块中的脏数据写入所述cache,通过所述cache将所述脏数据写入磁盘。另一方面,本发明实施例提供了一种处理脏数据的装置,包括:确定单元,用于在内存中确定第一存储块,所述第一存储块的大小与cache高速缓冲存储器的写规格相匹配;第一写单元,用于将内存中标记为脏数据的元组合并写入所述第一存储块;第二写单元,用于将所述第一存储块中的脏数据写入所述cache,通过所述cache将所述脏数据写入磁盘。本发明实施例提供的处理脏数据的方法及装置,能够将内存中标记为脏数据的元组合并在一起写入cache,再通过所述cache将脏数据写入磁盘。本发明实施例提供的方法及装置可以提升数据库系统的数据吞吐量以及读写性能,还能降低cache的读写使用频率,延长cache的使用寿命。
附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明一实施例提供的方法的流程示意图;图2为本发明另一实施例提供的方法的流程示意图;图3为本发明又一实施例提供的装置的一个结构示意图;图4为本发明又一实施例提供的装置的另一个结构示意图;图5为本发明又一实施例提供的装置的又一个结构示意图;图6为本发明又一实施例提供的装置的再一个结构示意图。
具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明实施例的脏数据可以是cache中已经修改过的、还未写入磁盘的数据。本发明实施例可以应用在各种类型的数据库和数据仓库系统中,包括DB数据库、Oracle数据库、SQL数据库等。本发明一实施例提供了一种处理脏数据的方法,如图1所示,包括:101、在内存中确定第一存储块,所述第一存储块的大小与cache的写规格相匹配。102、将内存中标记为脏数据的元组合并写入所述第一存储块。103、将所述第一存储块中的脏数据写入所述cache,通过所述cache将所述脏数据写入磁盘。本发明实施例提供的处理脏数据的方法,能够将内存中标记为脏数据的元组合并在一起写入cache,再通过所述cache将脏数据写入磁盘。本发明实施例提供的方法能够提升数据库系统的数据吞吐量以及读写性能,还能降低cache的读写使用频率,从而延长cache的使用寿命。本发明另一实施例还提供了一种脏数据的处理方法,如图2所示,包括:201、在内存中确定第一存储块,所述第一存储块的大小与cache的写规格相匹配。其中,所述cache是连接内存和磁盘的缓存设备;所述cache的写规格是指cache每刷新一次所能写入的最大数据量。一般的,cache的读写速度远大于内存的读写速度,为了提高脏数据的读写效率,可以在内存中确定与cache的写规格大小相同或接近的存储空间作为第一存储模块。具体的,可以将内存中的空闲空间进行整合,得到第一存储块;也可以在内存中预留符合第一存储块规格的存储空间作为第一存储块,此处不做限定。优选的,所述cache可以是类似于固态硬盘(Solidxa0Statexa0Disk,SSD)的闪存设备,但不仅限于此。202、将内存中标记为脏数据的元组合并写入所述第一存储块。值得说明的是,将内存中标记为脏数据的元组合并写入第一存储块之后,所述第一存储块中存储有标记为脏数据的每个元组所属的原始存储块信息、每个元组的数据以及指向每个元组数据的指针;其中,元组可以是存储脏数据的存储单元,还能够表示多个存储单元的联系,但不仅限于此。具体的,当内存中短时间内有大量数据被修改、且修改的数据分散于不同的存储块时,所述第一存储块可以将标记为脏数据的数组整合在一起写入cache,从而提升脏数据的读写效率。203、在内存中建立第一映射表,所述第一映射表用于记录所述第一存储块中各元组的时间版本号以及所述各元组所属的原始存储块信息。具体的,当内存中的脏数据较多时,可能需要多次使用第一存储块将脏数据写入cache;从而在cache中将存储有多个不同版本的第一存储块信息。为了便于索引,可以根据写入cache的先后顺序对第一存储块中的信息进行编号,确定每个第一存储块信息的时间版本号,其中,同一版本的第一存储块信息中各元组的时间版本号相同,所述各元组的时间版本号用于表征该元组在cache中所属的第一存储块信息。204、将所述第一存储块中的脏数据合并写入所述cache。值得说明的是,当内存中标记为脏数据的存储空间大于所述第一存储块的存储空间时,需要通过多次使用第一存储块将内存中标记为脏数据的元组写入cache,从而在cache中存储不同版本的第一储存块信息。在实际应用中,内存中标记为脏数据的元组往往可能进行过多次修改,从而在cache中往往会记录该元组的多个值;但是在将cache中的脏数据写入磁盘时仅需要将各元组的最终值写入磁盘;为了提高数据的读写效率,本实施例提供的方法还包括:205、当内存中标记为脏数据的元组进行过多次修改时,修改该元组在所述第一映射表中的时间版本号信息,更新所述第一映射表。206、根据所述第一映射表查找所述脏数据中各元组数据最终值的时间版本号,确定所述cache中与所述时间版本号对应的第一存储块信息,并将该第一存储块信息中存储有所述各元组数据最终值的元组进行标记,将其设置为有效元组。具体的,可以采用但不限于如下方法确定有效元组:按照各存储块版本的先后顺序,从最低版本的存储块开始依次读取各版本的第一存储块信息;根据所述时间版本号检测当前版本的第一存储块中的元组在较高版本的存储块中是否被再次修改;若是,则忽略当前元组;若否,则保留当前元组,将其标记为有效元组。207、在业务空闲期将cache中的有效元组写入磁盘,同时删除所述有效元组在所述第一映射表中对应的时间版本号信息以及所述有效元组在所述cache中对应的第一存储块信息。优选的,在将所述有效元组写入磁盘时,还可以根据所述第一映射表确定所述有效元组中各元组所属的原始存储块信息,将属于同一原始存储块的元组合并在一起写入磁盘,以提升数据的读写效率。具体的,当系统需要查找指定元组时,可以通过访问所述第一映射表,确定cache中是否包括所述指定元组数据;若否,则从磁盘中读取该元组数据;若是,则根据第一映射表确定包括该指定元组所述cache中包括所述指定元组的第一存储块信息,确定该指定元组的数据。当系统需要对整个存储块中的数据进行修改时,则从cache中获取相应的元组以覆盖磁盘中指定的存储块;当系统需要对单个元组进行修改时,则按照本实施例提供的方法完成指定元组的修改。值得说明的是,当发生异常情况(如断电、数据库系统崩溃、或强制性关闭数据库服务器等)导致将脏数据写入磁盘的过程被迫终止时,可以通过如下步骤将cache中剩余脏数据写入磁盘:在服务器重启后,根据所述cache中剩余版本的第一存储块信息重构所述第一映射表;根据所述第一映射表查找所述cache中剩余脏数据中各元组数据最终值的时间版本号,确定所述cache中与所述时间版本号对应的第一存储块信息,并将该第一存储块信息中存储有所述各元组数据最终值的元组进行标记,将其设置为有效元组;将所述有效元组写入磁盘,同时删除所述有效元组在所述第一映射表中对应的时间版本号信息以及所述有效元组在所述cache中对应的第一存储块信息。此外,当根据用户指示选择关闭服务器时,可以将内存中的第一映射表存储于所述cache中,以使得服务器在重启后根据所述第一映射表将所述cache中剩余版本的第一存储块信息写入磁盘。其中,将cache中脏数据写入磁盘的方法参照本实施例,此处不再赘述。本发明实施例提供的脏数据的处理方法,通过在内存中确定第一存储块,将内存中标记为脏数据的元组整合在一起写入cache;在业务空闲期将cache中的脏数据写入磁盘。与现有技术相比,当内存中短时间内有大量数据被修改、且修改的数据分散于不同的存储块时,本发明实施例提供的方法能够明显提升数据库系统的数据吞吐量以及读写性能,还便于系统对指定的元组数据进行查找或修改;同时还能够能降低cache的读写使用频率,延长cache的使用寿命。本发明又一实施例提供了一种脏数据的处理装置,能够实现上述方法实施例,如图3所示,所述装置包括:确定单元31,用于在内存中确定第一存储块,所述第一存储块的大小与cache的写规格相匹配;第一写单元32,用于将内存中标记为脏数据的元组合并写入所述第一存储块;第二写单元33,用于将所述第一存储块中的脏数据写入所述cache,通过所述cache将所述脏数据写入磁盘。进一步的,如图4所示,确定单元31还可以包括整合子单元311或预留子单元312,其中:整合子单元311用于将内存中的空闲空间进行整合,得到所述第一存储块;预留子单元312用于在内存中预留符合所述第一存储块规格的存储空间作为所述第一存储块。具体的,第一写单元32还用于将内存中标记为脏数据的元组的相关信息写入所述第一存储块,所述元组的相关信息包括标记为脏数据的每个元组所属的原始存储块信息、每个元组的数据以及指向每个元组数据的指针。进一步的,如图5所示,所述装置还包括处理单元34,第二写单元33具体包括第一处理子单元331、第一查找子单元332和第二处理子单元333,其中:处理单元34用于在所述内存中建立第一映射表,所述第一映射表用于记录所述第一存储块中各元组的时间版本号以及所述各元组所属的原始存储块信息,其中,所述各元组的时间版本号用于表征该元组在所述cache中所属的第一存储块的版本信息。具体的,所述处理单元34还用于当所述内存中标记为脏数据的元组进行过多次修改时,修改该元组在所述第一映射表中的时间版本号信息,更新所述第一映射表;具体的,第一处理子单元331用于将所述第一存储块中的脏数据写入所述cache,通过所述cache将所述脏数据写入磁盘;第一查找子单元332用于当内存中标记为脏数据的元组进行过多次修改时,根据所述第一映射表查找所述脏数据中各元组数据最终值的时间版本号,确定所述cache中与所述时间版本号对应的第一存储块信息,并将该第一存储块信息中存储有所述各元组数据最终值的元组进行标记,将其设置为有效元组;第二处理子单元333用于将第一查找子单元332确定的有效元组写入磁盘,并删除所述有效元组在所述cache中对应的元组数据信息;则处理单元34还用于在第二处理子单元333将所述有效元组写入磁盘后,删除所述有效元组在第一映射表中对应的时间版本号信息。则所述处理单元34还用于在所述第二处理子单元333将所述有效元组写入磁盘后,删除所述有效元组在所述第一映射表中对应的时间版本号信息。进一步的,如图6所示,第二写单元33还可以包括第二查找子单元334和第三处理子单元335,所述装置还包括第一查找单元35和第二查找单元36,其中:第二查找子单元334用于根据所述第一映射表确定所述有效元组中各元组所属的原始存储块信息;第二处理子单元335用于将属于同一原始存储块的元组合并写入磁盘,并删除该元组在所述cache中对应的元组数据信息。第一查找单元35用于当需要查找指定元组时,查找所述第一映射表,确定所述cache中是否包括所述指定元组;第二查找单元36用于当所述cache中包括所述指定元组时,根据第一映射表确定所述cache中包括该指定元组数据最终值的第一存储块信息,确定所述指定元组的数据。根据图6所述的装置,进一步的,所述处理单元34还用于当发生异常情况导致将脏数据写入磁盘的过程被迫终止时,在服务器重启后根据所述cache中剩余版本的第一存储块信息重构所述第一映射表;第一查找子单元332还用于根据所述处理单元34确定的第一映射表查找所述cache中剩余脏数据中各元组数据最终值的时间版本号,确定所述cache中与所述时间版本号对应的第一存储块信息,并将该第一存储块信息中存储有所述各元组数据最终值的元组进行标记,将其设置为有效元组;第二处理子单元333还用于将所述第一查找子单元332确定的有效元组写入磁盘,并删除所述有效元组在所述cache中对应的元组数据信息;处理单元34还用于在第二处理子单元333将所述有效元组写入磁盘后,删除所述有效元组在所述第一映射表中对应的时间版本号信息。根据图6所述的装置,进一步的,处理单元34还用于当服务器关闭时,将所述内存中的第一映射表存储于所述cache中,以使得所述服务器在重启后根据所述第一映射表将所述cache中剩余版本的第一存储块信息写入磁盘。本发明实施例提供的脏数据的处理装置,通过确定单元31在内存中确定第一存储块,通过第一写单元32将内存中标记为脏数据的元组整合在一起写入第一存储块;由第二写单元33在业务空闲期将第一存储块中的脏数据写入cache,通过所述cache将所述脏数据写入磁盘。与现有技术相比,当内存中短时间内有大量数据被修改、且修改的数据分散于不同的存储块时,本发明实施例提供的装置能够明显提升数据库系统的数据吞吐量以及读写性能,还便于系统对指定的元组数据进行查找或修改;同时还能够能降低cache的读写使用频率,延长cache的使用寿命。本发明实施例还提供了一种存储器,所述存储器包括图3至图6所述的装置以及处理器,所述处理器用于控制所述处理脏数据的装置。该存储器能够处理脏数据。值得说明的是,所述存储器可以用作内存,也可以用作cache,此处不做限定。通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。